A GraphicsPath object stores a sequence of lines, curves, and shapes. You can draw the entire sequence by calling the GdipDrawPath function. You can partition the sequence of lines, curves, and shapes into figures, and with the help of the PathIterator functions, you can draw selected figures. You can also place markers in the sequence, so that you can draw selected portions of the path.
| Name | Description |
|---|---|
| GdipAddPathArc | Adds an elliptical arc to the current figure of this path. |
| GdipAddPathArcI | Adds an elliptical arc to the current figure of this path. |
| GdipAddPathBezier | Adds a Bézier spline to the current figure of this path. |
| GdipAddPathBezierI | Adds a Bézier spline to the current figure of this path. |
| GdipAddPathBeziers | Adds a Bézier spline to the current figure of this path. |
| GdipAddPathBeziersI | Adds a Bézier spline to the current figure of this path. |
| GdipAddPathClosedCurve | Adds a closed cardinal spline to this path. |
| GdipAddPathClosedCurveI | Adds a closed cardinal spline to this path. |
| GdipAddPathClosedCurve2 | Adds a closed cardinal spline to this path. |
| GdipAddPathClosedCurve2I | Adds a closed cardinal spline to this path. |
| GdipAddPathCurve | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathCurveI | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathCurve2 | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathCurve2I | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathCurve3 | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathCurve3I | Adds a cardinal spline to the current figure of this path. |
| GdipAddPathEllipse | Adds an ellipse to this path. |
| GdipAddPathEllipseI | Adds an ellipse to this path. |
| GdipAddPathLine | Adds a line to the current figure of this path. |
| GdipAddPathLineI | Adds a line to the current figure of this path. |
| GdipAddPathLine2 | Adds a line to the current figure of this path. |
| GdipAddPathLine2I | Adds a line to the current figure of this path. |
| GdipAddPathPath | Adds a path to this path. |
| GdipAddPathPie | Adds a pie to this path. |
| GdipAddPathPieI | Adds a pie to this path. |
| GdipAddPathPolygon | Adds a polygon to this path. |
| GdipAddPathPolygonI | Adds a polygon to this path. |
| GdipAddPathRectangle | Adds a rectangle to this path. |
| GdipAddPathRectangleI | Adds a rectangle to this path. |
| GdipAddPathRectangles | Adds a sequence of rectangles to this path. |
| GdipAddPathRectanglesI | Adds a sequence of rectangles to this path. |
| GdipAddPathString | Adds the outline of a string to this path. |
| GdipAddPathStringI | Adds the outline of a string to this path. |
| GdipClearPathMarkers | Clears the markers from this path. |
| GdipClonePath | Creates a new GraphicsPath object, and initializes it with the contents of this GraphicsPath object. |
| GdipClosePathFigure | Closes the current figure of this path. |
| GdipClosePathFigures | Closes all open figures in this path. |
| GdipCreatePath | Creates a GraphicsPath object and initializes the fill mode. |
| GdipCreatePath2 | Creates a GraphicsPath object and initializes the fill mode. |
| GdipCreatePath2I | Creates a GraphicsPath object and initializes the fill mode. |
| GdipDeletePath | Deletes the specified GraphicsPath object. |
| GdipFlattenPath | Applies a transformation to this path and converts each curve in the path to a sequence of connected lines. |
| GdipGetPathData | Gets an array of points and an array of point types from this path. Together, these two arrays define the lines, curves, figures, and markers of this path. |
| GdipGetPathFillMode | Sets the fill mode of this path. |
| GdipGetPathLastPoint | Gets the ending point of the last figure in this path. |
| GdipGetPathPoints | Gets this path’s array of points. The array contains the endpoints and control points of the lines and Bézier splines that are used to draw the path. |
| GdipGetPathPointsI | Gets this path’s array of points. The array contains the endpoints and control points of the lines and Bézier splines that are used to draw the path. |
| GdipGetPathTypes | Gets this path’s array of points. The array contains the endpoints and control points of the lines and Bézier splines that are used to draw the path. |
| GdipGetPathWorldBounds | Gets a bounding rectangle for this path. |
| GdipGetPathWorldBoundsI | Gets a bounding rectangle for this path. |
| GdipGetPointCount | Gets the number of points in this path’s array of data points. This is the same as the number of types in the path’s array of point types. |
| GdipIsOutlineVisiblePathPoint | Determines whether a specified point touches the outline of this path when the path is drawn by a specified Graphics object and a specified pen. |
| GdipIsOutlineVisiblePathPointI | Determines whether a specified point touches the outline of this path when the path is drawn by a specified Graphics object and a specified pen. |
| GdipIsVisiblePathPoint | Determines whether a specified point lies in the area that is filled when this path is filled by a specified Graphics object. |
| GdipIsVisiblePathPointI | Determines whether a specified point lies in the area that is filled when this path is filled by a specified Graphics object. |
| GdipResetPath | Empties the path and sets the fill mode to FillModeAlternate. |
| GdipReversePath | Reverses the order of the points that define this path’s lines and curves. |
| GdipSetPathFillMode | Sets the fill mode of this path. |
| GdipSetPathMarker | Designates the last point in this path as a marker point. |
| GdipStartPathFigure | Starts a new figure without closing the current figure. Subsequent points added to this path are added to the new figure. |
| GdipTransformPath | Multiplies each of this path’s data points by a specified matrix. |
| GdipWarpPath | Applies a warp transformation to this path. This function also flattens (converts to a sequence of straight lines) the path. |
| GdipWidenPath | Replaces this path with curves that enclose the area that is filled when this path is drawn by a specified pen. This function also flattens the path. |
| GdipWindingModeOutline | Transforms and flattens this path, and then converts this path’s data points so that they represent only the outline of the path. |
Adds an elliptical arc to the current figure of this path.
FUNCTION GdipAddPathArc (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, BYVAL width AS REAL, _
BYVAL height AS REAL, BYVAL startAngle AS REAL, BYVAL sweepAngle AS REAL) AS GpStatus
FUNCTION GdipAddPathArcI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, BYVAL width AS INT_, _
BYVAL height AS INT_, BYVAL startAngle AS REAL, BYVAL sweepAngle AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the upper-left corner of the bounding rectangle for the ellipse that contains the arc. |
| y | [in] The y-coordinate of the upper-left corner of the bounding rectangle for the ellipse that contains the arc. |
| width | [in] The width of the bounding rectangle for the ellipse that contains the arc. |
| height | [in] The height of the bounding rectangle for the ellipse that contains the arc. |
| startAngle | [in] The clockwise angle, in degrees, between the horizontal axis of the ellipse and the starting point of the arc. |
| sweepAngle | [in] The clockwise angle, in degrees, between the starting point (startAngle) and the ending point of the arc. |
' ========================================================================================
' The following example draws a 90-degree arc.
' ========================================================================================
SUB Example_DrawArc (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Adds an elliptical arc to the current figure of this path.
hStatus = GdipAddPathArc(path, 140, 15, 100, 150, 0, 180)
' // Closes the current figure of the path.
hStatus = GdipClosePathFigure(path)
' // Create a red pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 1, UnitWorld, @pen)
' // Draw the path.
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a Bézier spline to the current figure of this path.
FUNCTION GdipAddPathBezier (BYVAL path AS GpPath PTR, BYVAL x1 AS REAL, BYVAL y1 AS REAL, BYVAL x2 AS REAL, _
BYVAL y2 AS REAL, BYVAL x4 AS REAL, BYVAL y3 AS REAL, BYVAL x4 AS REAL, BYVAL y4 AS REAL) AS GpStatus
FUNCTION GdipAddPathBezierI (BYVAL path AS GpPath PTR, BYVAL x1 AS INT_, BYVAL y1 AS INT_, BYVAL x2 AS INT_, _
BYVAL y2 AS INT_, BYVAL x4 AS INT_, BYVAL y3 AS INT_, BYVAL x4 AS INT_, BYVAL y4 AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x1 | [in] The x-coordinate of the starting point of the Bézier spline. |
| y1 | [in] The y-coordinate of the starting point of the Bézier spline. |
| x2 | [in] The x-coordinate of the first control point of the Bézier spline. |
| y2 | [in] The y-coordinate of the first control point of the Bézier spline. |
| x3 | [in] The x-coordinate of the second control point of the Bézier spline. |
| y3 | [in] The y-coordinate of the second control point of the Bézier spline. |
| x4 | [in] The x-coordinate of the ending point of the Bézier spline. |
| y4 | [in] The y-coordinate of the ending point of the Bézier spline. |
' ========================================================================================
' This example draws a Bézier curve using GdipAddPathBezier.
' ========================================================================================
SUB Example_DrawBezier (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add Bézier curve: start ? control1 ? control2 ? end
hStatus = GdipAddPathBezier(path, 50, 150, 100, 50, 200, 250, 250, 150)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLUE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a Bézier spline to the current figure of this path.
FUNCTION GdipAddPathBeziers (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathBeziersI (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of starting points, ending points, and control points for the connected splines. The first spline is constructed from the first point through the fourth point in the array and uses the second and third points as control points. Each subsequent spline in the sequence needs exactly three more points: the ending point of the previous spline is used as the starting point, the next two points in the sequence are control points, and the third point is the ending point. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
' ========================================================================================
' This example draws a sequence of Bézier curves using GdipAddPathBeziers.
' ========================================================================================
SUB Example_DrawBeziers (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for two connected Bézier curves
DIM pts(0 TO 7) AS GpPointF
pts(0).x = 30 : pts(0).y = 150 ' Start point
pts(1).x = 80 : pts(1).y = 50 ' Control 1
pts(2).x = 130 : pts(2).y = 250 ' Control 2
pts(3).x = 180 : pts(3).y = 150 ' End of first curve
pts(4).x = 230 : pts(4).y = 50 ' Control 1 of second
pts(5).x = 280 : pts(5).y = 250 ' Control 2 of second
pts(6).x = 330 : pts(6).y = 150 ' End of second curve
' // Add connected Bézier curves
hStatus = GdipAddPathBeziers(path, @pts(0), 7)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_GREEN, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a closed cardinal spline to the path.
FUNCTION GdipAddPathClosedCurve (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathClosedCurveI (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that define the cardinal spline. The cardinal spline is a curve that passes through each point in the array. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
You should keep a copy of the points array if those points will be needed later. The GraphicsPath object does not store the points passed to the GdipAddPathClosedCurve function; instead, it converts the cardinal spline to a sequence of Bézier splines and stores the points that define those Bézier splines. You cannot retrieve the original array of points from the GraphicsPath object.
' ========================================================================================
' This example draws a closed curve that loops through a set of points.
' ========================================================================================
SUB Example_DrawClosedCurve (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the closed curve
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 60 : pts(0).y = 100
pts(1).x = 120 : pts(1).y = 40
pts(2).x = 180 : pts(2).y = 100
pts(3).x = 150 : pts(3).y = 180
pts(4).x = 90 : pts(4).y = 180
' // Add closed curve to path
hStatus = GdipAddPathClosedCurve(path, @pts(0), 5)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_PURPLE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a closed cardinal spline to this path.
FUNCTION GdipAddPathClosedCurve2 (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_, BYVAL tension AS REAL) AS GpStatus
FUNCTION GdipAddPathClosedCurve2I (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_, BYVAL tension AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that define the cardinal spline. The cardinal spline is a curve that passes through each point in the array. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
| tension | [in] Nonnegative simple precision value that controls the length of the curve and how the curve bends. A value of 0 specifies that the spline is a sequence of straight line segments. As the value increases, the curve becomes fuller. |
You should keep a copy of the points array if those points will be needed later. The GraphicsPath object does not store the points passed to the GdipAddPathClosedCurve2 function; instead, it converts the cardinal spline to a sequence of Bézier splines and stores the points that define those Bézier splines. You cannot retrieve the original array of points from the GraphicsPath object.
' ========================================================================================
' This example draws a closed cardinal spline with adjustable tension.
' ========================================================================================
SUB Example_DrawClosedCurve2 (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the closed curve
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 60 : pts(0).y = 100
pts(1).x = 120 : pts(1).y = 40
pts(2).x = 180 : pts(2).y = 100
pts(3).x = 150 : pts(3).y = 180
pts(4).x = 90 : pts(4).y = 180
' // Add closed curve with tension
DIM tension AS SINGLE = 0.5
hStatus = GdipAddPathClosedCurve2(path, @pts(0), 5, tension)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a cardinal spline to the current figure of this path.
FUNCTION GdipAddPathCurve (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathCurveI (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that define the cardinal spline. The cardinal spline is a curve that passes through each point in the array. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
You should keep a copy of the points array if those points will be needed later. The GraphicsPath object does not store the points passed to the GdipAddPathCurve function; instead, it converts the cardinal spline to a sequence of Bézier splines and stores the points that define those Bézier splines. You cannot retrieve the original array of points from the GraphicsPath object.
' ========================================================================================
' This example draws a cardinal spline using GdipAddPathCurve.
' ========================================================================================
SUB Example_DrawCurve (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the curve
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 60 : pts(0).y = 100
pts(1).x = 120 : pts(1).y = 40
pts(2).x = 180 : pts(2).y = 100
pts(3).x = 150 : pts(3).y = 180
pts(4).x = 90 : pts(4).y = 180
' // Add cardinal spline to path
hStatus = GdipAddPathCurve(path, @pts(0), 5)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_TEAL, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a cardinal spline to the current figure of this path.
FUNCTION GdipAddPathCurve2 (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_, BYVAL tension AS REAL) AS GpStatus
FUNCTION GdipAddPathCurve2I (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_, BYVAL tension AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that define the cardinal spline. The cardinal spline is a curve that passes through each point in the array. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
| tension | [in] Nonnegative simple precision value that controls the length of the curve and how the curve bends. A value of 0 specifies that the spline is a sequence of straight line segments. As the value increases, the curve becomes fuller. |
You should keep a copy of the points array if those points will be needed later. The GraphicsPath object does not store the points passed to the GdipAddPathCurve function; instead, it converts the cardinal spline to a sequence of Bézier splines and stores the points that define those Bézier splines. You cannot retrieve the original array of points from the GraphicsPath object.
' ========================================================================================
' This example draws a cardinal spline with a specified tension using GdipAddPathCurve2.
' ========================================================================================
SUB Example_DrawCurve2 (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the curve
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 60 : pts(0).y = 100
pts(1).x = 120 : pts(1).y = 40
pts(2).x = 180 : pts(2).y = 100
pts(3).x = 150 : pts(3).y = 180
pts(4).x = 90 : pts(4).y = 180
' // Add cardinal spline with tension
DIM tension AS SINGLE = 0.8
hStatus = GdipAddPathCurve2(path, @pts(0), 5, tension)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_NAVY, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a cardinal spline to the current figure of this path.
FUNCTION GdipAddPathCurve3 (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPointF PTR, _
BYVAL count AS INT_, BYVAL offset AS INT_, BYVAL numberOfSegments AS INT_, BYVAL tension AS REAL) AS GpStatus
FUNCTION GdipAddPathCurve3I (BYVAL path AS GpPath PTR, BYVAL points AS CONST GpPoint PTR, _
BYVAL count AS INT_, BYVAL offset AS INT_, BYVAL numberOfSegments AS INT_, BYVAL tension AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that define the cardinal spline. The cardinal spline is a curve that passes through each point in the array. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
| offset | [in] Long integer value that specifies the index of the array element that is used as the first point of the cardinal spline. |
| numberOfSegments | [in] Long integer value that specifies the number of segments in the cardinal spline. Segments are the curves that connect consecutive points in the array. |
| tension | [in] Nonnegative simple precision value that controls the length of the curve and how the curve bends. A value of 0 specifies that the spline is a sequence of straight line segments. As the value increases, the curve becomes fuller. |
You should keep a copy of the points array if those points will be needed later. The GraphicsPath object does not store the points passed to the GdipAddPathCurve function; instead, it converts the cardinal spline to a sequence of Bézier splines and stores the points that define those Bézier splines. You cannot retrieve the original array of points from the GraphicsPath object.
' ========================================================================================
' This example draws a cardinal spline using GdipAddPathCurve3 with per-point tension.
' ========================================================================================
SUB Example_DrawCurve3 (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the curve
' // Define a larger array of points
DIM pts(0 TO 6) AS GpPointF
pts(0).x = 40 : pts(0).y = 120
pts(1).x = 80 : pts(1).y = 60
pts(2).x = 120 : pts(2).y = 140
pts(3).x = 160 : pts(3).y = 80
pts(4).x = 200 : pts(4).y = 160
pts(5).x = 240 : pts(5).y = 100
pts(6).x = 280 : pts(6).y = 180
' // Add curve starting at offset 2, using 5 points, with tension 0.6
DIM offset AS LONG = 2
DIM segmentCount AS LONG = 4
DIM tension AS SINGLE = 0.6
hStatus = GdipAddPathCurve3(path, @pts(0), 7, offset, segmentCount, tension)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_OLIVE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds an ellipse to the path.
FUNCTION GdipAddPathEllipse (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL width AS REAL, BYVAL height AS REAL) AS GpStatus
FUNCTION GdipAddPathEllipseI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL width AS INT_, BYVAL height AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the upper-left corner of the bounding rectangle for the ellipse. |
| y | [in] The y-coordinate of the upper-left corner of the bounding rectangle for the ellipse. |
| width | [in] The width of the bounding rectangle for the ellipse. |
| height | [in] The height of the bounding rectangle for the ellipse. |
A GraphicsPath object stores an ellipse as a sequence of four connected Bézier splines. The GraphicsPath object does not store the upper-left corner, width, and height of the ellipse’s bounding rectangle.
' ========================================================================================
' This example draws an ellipse using GdipAddPathEllipse.
' ========================================================================================
SUB Example_DrawEllipse (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add ellipse to path
hStatus = GdipAddPathEllipse(path, 100, 70, 200, 100)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_MAGENTA, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a line to the current figure of the path.
FUNCTION GdipAddPathLine (BYVAL path AS GpPath PTR, BYVAL x1 AS REAL, BYVAL y1 AS REAL, _
BYVAL x2 AS REAL, BYVAL y2 AS REAL) AS GpStatus
FUNCTION GdipAddPathLineI (BYVAL path AS GpPath PTR, BYVAL x1 AS INT_, BYVAL y1 AS INT_, _
BYVAL x2 AS INT_, BYVAL y2 AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x1 | [in] The x-coordinate of the starting point of the line. |
| y1 | [in] The y-coordinate of the starting point of the line. |
| x2 | [in] The x-coordinate of the ending point of the line. |
| y2 | [in] The y-coordinate of the ending point of the line. |
' ========================================================================================
' This example draws a single line using GdipAddPathLine.
' ========================================================================================
SUB Example_DrawLine (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a line from (50, 50) to (250, 150)
hStatus = GdipAddPathLine(path, 50, 50, 250, 150)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLACK, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a cardinal spline to the current figure of this path.
FUNCTION GdipAddPathLine2 (BYVAL path AS GpPath PTR, BYVAL points AS GpPointF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathLine2I (BYVAL path AS GpPath PTR, BYVAL points AS GpPoint PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that specify the starting and ending points of the lines. The first point in the array is the starting point of the first line, and the last point in the array is the ending point of the last line. Each of the other points serves as ending point for one line and starting point for the next line. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
' ========================================================================================
' This example draws a polyline using GdipAddPathLine2.
' ========================================================================================
SUB Example_DrawLine2 (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a GraphicsPath object and initializes the fill mode.
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define points for the polyline
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 60 : pts(0).y = 100
pts(1).x = 120 : pts(1).y = 40
pts(2).x = 180 : pts(2).y = 100
pts(3).x = 150 : pts(3).y = 180
pts(4).x = 90 : pts(4).y = 180
' // Add connected lines to path
hStatus = GdipAddPathLine2(path, @pts(0), 5)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKGRAY, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a path to the path.
FUNCTION GdipAddPathPath (BYVAL path AS GpPath PTR, BYVAL addingPath AS GpPath PTR, _
BYVAL connect AS BOOL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| addingPath | [in] Pointer to the path to be added. |
| connect | [in] Boolean value that specifies whether the first figure in the added path is part of the last figure in this path. TRUE: Specifies that (if possible) the first figure in the added path is part of the last figure in this path. FALSE: Specifies that the first figure in the added path is separate from the last figure in this path. |
' ========================================================================================
' This example combines two GraphicsPath objects using GdipAddPathPath.
' ========================================================================================
SUB Example_DrawPathPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create base path
DIM basePath AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @basePath)
hStatus = GdipAddPathEllipse(basePath, 120, 70, 150, 100)
' // Create another path to add
DIM subPath AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @subPath)
hStatus = GdipAddPathRectangle(subPath, 150, 100, 90, 40)
' // Merge subPath into basePath
DIM connect AS BOOL = FALSE ' FALSE = separate figure
hStatus = GdipAddPathPath(basePath, subPath, connect)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLUE, 2, UnitWorld, @pen)
' // Draw combined path
hStatus = GdipDrawPath(graphics, pen, basePath)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF subPath THEN GdipDeletePath(subPath)
IF basePath THEN GdipDeletePath(basePath)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a pie to this path. An arc is a portion of an ellipse, and a pie is a portion of the area enclosed by an ellipse. A pie is bounded by an arc and two lines (edges) that go from the center of the ellipse to the endpoints of the arc.
FUNCTION GdipAddPathPie (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL width AS REAL, BYVAL height AS REAL, BYVAL startAngle AS REAL, BYVAL sweepAngle AS REAL) AS GpStatus
FUNCTION GdipAddPathPieI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL width AS INT_, BYVAL height AS INT_, BYVAL startAngle AS REAL, BYVAL sweepAngle AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the upper-left corner of the rectangle that bounds the ellipse that bounds the pie. |
| y | [in] The y-coordinate of the upper-left corner of the rectangle that bounds the ellipse that bounds the pie. |
| width | [in] The width of the rectangle that bounds the ellipse that bounds the pie. |
| height | [in] The height of the rectangle that bounds the ellipse that bounds the pie. |
| startAngle | [in] Simple precision value that specifies the clockwise angle, in degrees, between the horizontal axis of the ellipse and the starting point of the arc that defines the pie. |
| sweepAngle | [in] Simple precision value that specifies the clockwise angle, in degrees, between the starting and ending points of the arc that defines the pie. |
' ========================================================================================
' This example draws a pie slice using GdipAddPathPie.
' ========================================================================================
SUB Example_DrawPie (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add pie slice to path
DIM x AS SINGLE = 100
DIM y AS SINGLE = 50
DIM nWidth AS SINGLE = 200
DIM nHeight AS SINGLE = 150
DIM startAngle AS SINGLE = 30
DIM sweepAngle AS SINGLE = 120
hStatus = GdipAddPathPie(path, x, y, nWidth, nHeight, startAngle, sweepAngle)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_CRIMSON, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a polygon to this path.
FUNCTION GdipAddPathPolygon (BYVAL path AS GpPath PTR, BYVAL points AS GpPointF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathPolygonI (BYVAL path AS GpPath PTR, BYVAL points AS GpPoint PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [in] Pointer to an array of points that specifies the vertices of the polygon. |
| count | [in] Long integer value that specifies the number of elements in the points array. |
' ========================================================================================
' This example draws a closed polygon using GdipAddPathPolygon.
' ========================================================================================
SUB Example_DrawPolygon (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define polygon points
DIM pts(0 TO 4) AS GpPointF
pts(0).x = 100 : pts(0).y = 50
pts(1).x = 200 : pts(1).y = 80
pts(2).x = 180 : pts(2).y = 160
pts(3).x = 120 : pts(3).y = 160
pts(4).x = 80 : pts(4).y = 100
' // Add polygon to path
hStatus = GdipAddPathPolygon(path, @pts(0), 5)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_FORESTGREEN, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a rectangle to the path.
FUNCTION GdipAddPathRectangle (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL width AS REAL, BYVAL height AS REAL) AS GpStatus
FUNCTION GdipAddPathRectangleI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL width AS INT_, BYVAL height AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the upper-left corner of the bounding rectangle. |
| y | [in] The y-coordinate of the upper-left corner of the bounding rectangle. |
| width | [in] The width of the bounding rectangle. |
| width | [in] The height of the bounding rectangle. |
' ========================================================================================
' This example draws a rectangle using GdipAddPathRectangle.
' ========================================================================================
SUB Example_DrawRectangle (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add rectangle to path
hStatus = GdipAddPathRectangle(path, 150, 60, 100, 100)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_SADDLEBROWN, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds a sequence of rectangles to the path.
FUNCTION GdipAddPathRectangles (BYVAL path AS GpPath PTR, BYVAL rects AS GpRectF PTR, _
BYVAL count AS INT_) AS GpStatus
FUNCTION GdipAddPathRectanglesI (BYVAL path AS GpPath PTR, BYVAL rects AS GpRect PTR, _
BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| rects | [in] Pointer to an array of rectangles that will be added to the path. |
| count | [in] Long integer value that specifies the number of elements in the rects array. |
' ========================================================================================
' This example adds a sequence of rectangles to a GraphicsPath using GdipAddPathRectangles.
' ========================================================================================
SUB Example_DrawRectangles (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define array of rectangles
DIM rects(0 TO 2) AS GpRectF
rects(0).x = 50 : rects(0).y = 60 : rects(0).Width = 80 : rects(0).Height = 40
rects(1).x = 150 : rects(1).y = 60 : rects(1).Width = 80 : rects(1).Height = 40
rects(2).x = 250 : rects(2).y = 60 : rects(2).Width = 80 : rects(2).Height = 40
' // Add rectangles to path
hStatus = GdipAddPathRectangles(path, @rects(0), 3)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_INDIGO, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Adds the outline of a string to this path.
FUNCTION GdipAddPathString (BYVAL path AS GpPath PTR, BYVAL string AS CONST WSTRING PTR, _
BYVAL length AS INT_, BYVAL family AS CONST GpFontFamily PTR, BYVAL style AS INT_, _
BYVAL emSize AS REAL, BYVAL layoutRect AS CONST GpRectF PTR, _
BYVAL format AS CONST GpStringFormat PTR) AS GpStatus
FUNCTION GdipAddPathStringI (BYVAL path AS GpPath PTR, BYVAL string AS CONST WSTRING PTR, _
BYVAL length AS INT_, BYVAL family AS CONST GpFontFamily PTR, BYVAL style AS INT_, _
BYVAL emSize AS REAL, BYVAL layoutRect AS CONST GpRect PTR, _
BYVAL format AS CONST GpStringFormat PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| string | [in] Pointer to a wide-character string. |
| length | [in] Long integer value that specifies the number of characters to display. If the string parameter points to a NULL-terminated string, this parameter can be set to –1. |
| family | [in] Pointer to a GpFontFamily object that specifies the font family for the string. |
| style | [in] Long integer value that specifies the style of the typeface. This value must be an element of the FontStyle enumeration or the result of a bitwise OR applied to two or more of these elements. For example, FontStyleBold OR FontStyleUnderline OR FontStyleStrikeout sets the style as a combination of the three styles. |
| emSize | [in] Simple precision value that specifies the em size, in world units, of the string characters. |
| layoutRect | [in] Reference to a GpRect structure that specifies, in world units, the bounding rectangle for the string. |
| format | [in] Pointer to a StringFormat object that specifies layout information (alignment, trimming, tab stops, and the like) for the string. |
' ========================================================================================
' This example adds the outline of a string to a GraphicsPath using GdipAddPathString.
' ========================================================================================
SUB Example_DrawPathString (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Define font family
DIM fontFamily AS GpFontFamily PTR
hStatus = GdipCreateFontFamilyFromName("Arial", NULL, @fontFamily)
' // Define layout rectangle
DIM layout AS GpRectF = (90, 90, 300, 100)
' // Add string to path
DIM text AS WSTRING * 32 = "Hello, GDI+!"
DIM style AS LONG = FontStyleRegular
DIM emSize AS SINGLE = 36
hStatus = GdipAddPathString(path, @text, -1, fontFamily, style, emSize, @layout, NULL)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKRED, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF fontFamily THEN GdipDeleteFontFamily(fontFamily)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Clears the markers from the path.
FUNCTION GdipClearPathMarkers (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example sets a marker in a path and then clears it using GdipClearPathMarkers.
' ========================================================================================
SUB Example_ClearMarkers (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add some shapes
hStatus = GdipAddPathRectangle(path, 50, 50, 100, 60)
hStatus = GdipSetPathMarker(path) ' Set a marker after the rectangle
hStatus = GdipAddPathEllipse(path, 200, 50, 100, 60)
' // Clear all markers
hStatus = GdipClearPathMarkers(path)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKBLUE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Creates a new GraphicsPath object, and initializes it with the contents of this GraphicsPath object.
FUNCTION GdipClonePath (BYVAL path AS GpPath PTR, BYVAL clonePath AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| clonePath | [out] Pointer to the new GraphicsPath object. |
' ========================================================================================
' This example clones a GraphicsPath using GdipClonePath.
' ========================================================================================
SUB Example_ClonePath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create original path
DIM originalPath AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @originalPath)
hStatus = GdipAddPathEllipse(originalPath, 120, 70, 150, 100)
' // Clone the path
DIM clonedPath AS GpPath PTR
hStatus = GdipClonePath(originalPath, @clonedPath)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKORANGE, 2, UnitWorld, @pen)
' // Draw cloned path
hStatus = GdipDrawPath(graphics, pen, clonedPath)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF clonedPath THEN GdipDeletePath(clonedPath)
IF originalPath THEN GdipDeletePath(originalPath)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Closes the current figure of a path.
FUNCTION GdipClosePathFigure (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example draws an open arc and closes it using GdipClosePathFigure.
' ========================================================================================
SUB Example_CloseFigure (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add an arc (open by default)
hStatus = GdipAddPathArc(path, 140, 15, 100, 150, 0, 180)
' // Close the figure (connects end point to start point)
hStatus = GdipClosePathFigure(path)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Closes all open figures in a path.
FUNCTION GdipClosePathFigures (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example draws two open shapes and closes them using GdipClosePathFigures.
' ========================================================================================
SUB Example_CloseFigures (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add first figure (arc)
hStatus = GdipAddPathArc(path, 100, 50, 100, 100, 0, 180)
' // Start new figure
hStatus = GdipStartPathFigure(path)
' // Add second figure (line)
hStatus = GdipAddPathLine(path, 250, 50, 350, 150)
' // Close all open figures
hStatus = GdipClosePathFigures(path)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKGREEN, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Creates a GraphicsPath object and initializes the fill mode.
FUNCTION GdipCreatePath (BYVAL brushMode AS GpFillMode, BYVAL path AS GpPathPTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| brushMode | [in] Element of the FillMode enumeration that specifies how areas are filled if the path intersects itself. The default value is FillModeAlternate. |
| path | [out] Pointer to a variable that receives a pointer to the new GraphicsPath object. |
' ========================================================================================
' This example creates a GraphicsPath and adds a shape to it.
' ========================================================================================
SUB Example_CreatePath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape to the path
hStatus = GdipAddPathEllipse(path, 120, 80, 150, 100)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_MIDNIGHTBLUE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Creates a GraphicsPath object and initializes the fill mode.
FUNCTION GdipCreatePath2 (BYVAL points AS CONST GpPointF PTR, BYVAL types AS CONST BYTE PTR, _
BYVAL count AS INT_, BYVAL fillMode AS GpFillMode, BYVAL path AS GpPath PTR PTR) AS GpStatus
FUNCTION GdipCreatePath2I (BYVAL points AS CONST GpPoint PTR, BYVAL types AS CONST BYTE PTR, _
BYVAL count AS INT_, BYVAL fillMode AS GpFillMode, BYVAL path AS GpPath PTR PTR) AS GpStatus
| Parameter | Description |
|---|---|
| points | [in] Pointer to an array of points that specifies the endpoints and control points of the lines and Bezier splines that are used to draw the path. |
| types | [in] Pointer to an array of bytes that holds the point type and a set of flags for each point in the points array. The point type is stored in the three least significant bits, and the flags are stored in the four most significant bits. Possible point types and flags are listed in the PathPointType enumeration. |
| count | [in] Long integer value that specifies the number of elements in the points array. This is the same as the number of elements in the types array. |
| fillMode | [in] Element of the FillMode enumeration that specifies how areas are filled if the path intersects itself. The default value is FillModeAlternate. |
| path | [out] Pointer to a variable that receives a pointer to the new GraphicsPath object. |
' ========================================================================================
' This example creates a GraphicsPath using GdipCreatePath2 with custom points and types.
' ========================================================================================
SUB Example_CreatePath2 (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Define points
DIM pts(0 TO 2) AS GpPointF
pts(0).x = 100 : pts(0).y = 100 ' Start
pts(1).x = 200 : pts(1).y = 100 ' Line
pts(2).x = 200 : pts(2).y = 200 ' Line
' // Define types
DIM types(0 TO 2) AS BYTE
types(0) = PathPointTypeStart
types(1) = PathPointTypeLine
types(2) = PathPointTypeLine OR PathPointTypeCloseSubpath
' // Create path from raw data
DIM path AS GpPath PTR
hStatus = GdipCreatePath2(@pts(0), @types(0), 3, FillModeAlternate, @path)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_MAROON, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Deletes the specified GraphicsPath object.
FUNCTION GdipDeletePath (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example creates and deletes a GraphicsPath using GdipDeletePath.
' ========================================================================================
SUB Example_DeletePath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathEllipse(path, 100, 80, 150, 100)
' // Draw path
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_NAVY, 2, UnitWorld, @pen)
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path) ' <-- Frees the path object
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Applies a transformation to this path and converts each curve in the path to a sequence of connected lines.
FUNCTION GdipFlattenPath (BYVAL path AS GpPath PTR, BYVAL matrix AS GpMatrix PTR, _
BYVAL flatness AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| matrix | [in] Pointer to a Matrix object that specifies the transformation to be applied to the path’s data points. The default value is NULL, which specifies that no transformation is to be applied. |
| flatness | [in] Simple precision value that specifies the maximum error between the path and its flattened approximation. Reducing the flatness increases the number of line segments in the approximation. The default value is FlatnessDefault. |
' ========================================================================================
' This example flattens a path containing a Bézier curve using GdipFlattenPath.
' ========================================================================================
SUB Example_FlattenPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a Bézier curve
hStatus = GdipAddPathBezier(path, 50, 150, 100, 50, 200, 250, 250, 150)
' // Flatten the path (convert curve to lines)
hStatus = GdipFlattenPath(path, NULL, 0.25)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw flattened path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets an array of points and an array of point types from this path. Together, these two arrays define the lines, curves, figures, and markers of this path.
FUNCTION GdipGetPathData (BYVAL path AS GpPath PTR, BYVAL pathData AS GpPathData PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| pathData | [out] Pointer to a GpPathData structure that receives the path data. The Points data member of the GpPathData structure receives a pointer to an array of GpPointF structures that contains the path points. The Types data member of the GpPathData structure receives a pointer to an array of bytes that contains the point types. The Count data member of the GpPathData structure receives an integer that indicates the number of elements in the Points array. |
' ========================================================================================
' This example extracts the points and types from a GraphicsPath using GdipGetPathData.
' ========================================================================================
SUB Example_GetPathData (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Get point count
DIM count AS LONG
GdipGetPointCount(path, @count)
' // Allocate memory for points and types
DIM pts(ANY) AS GpPointF
DIM types(ANY) AS BYTE
REDIM pts(count - 1)
REDIM types(count - 1)
' // Fill the GpPathData structure
DIM pathData AS GpPathData
pathData.Count = count
pathData.Points = @pts(0)
pathData.Types = @types(0)
' // Retrieve path data
hStatus = GdipGetPathData(path, @pathData)
' // Print the data
FOR i AS LONG = 0 TO pathData.Count - 1
OutputDebugStringW("Point " & WSTR(i) & ": (" & WSTR(pathData.Points[i].x) & ", " & WSTR(pathData.Points[i].y))
OutputDebugStringW("Type " & WSTR(i) & ": " & WSTR(pathData.Types[i]))
NEXT
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Sets the fill mode of this path.
FUNCTION GdipGetPathFillMode (BYVAL path AS GpPath PTR, BYVAL fillMode AS GpFillMode PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| fillMode | [out] Pointer to a variable that receives an element of the FillMode enumeration that specifies how to fill areas when the path intersects itself. |
' ========================================================================================
' This example retrieves the fill mode of a GraphicsPath using GdipGetPathFillMode.
' ========================================================================================
SUB Example_GetFillMode (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath with alternate fill mode
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathEllipse(path, 100, 70, 200, 100)
' // Retrieve fill mode
DIM fillMode AS LONG
hStatus = GdipGetPathFillMode(path, @fillMode)
' // Display result
SELECT CASE fillMode
CASE FillModeAlternate
AfxMsg "Fill mode is: Alternate"
CASE FillModeWinding
AfxMsg "Fill mode is: Winding"
CASE ELSE
AfxMsg "Unknown fill mode: " & WSTR(fillMode)
END SELECT
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets the ending point of the last figure in this path.
FUNCTION GdipGetPathLastPoint (BYVAL path AS GpPath PTR, BYVAL lastPoint AS GpPointF PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| lastPoint | [out] Pointer to a GpPointF structure that receives the last point. |
' ========================================================================================
' This example retrieves the last point from a GraphicsPath using GdipGetPathLastPoint.
' ========================================================================================
SUB Example_GetLastPoint (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Retrieve last point
DIM lastPoint AS GpPointF
hStatus = GdipGetPathLastPoint(path, @lastPoint)
' // Display result
AfxMsg "Last point: ("& WSTR(lastPoint.x) & ", " & WSTR(lastPoint.y) & ")"
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets this path’s array of points. The array contains the endpoints and control points of the lines and Bézier splines that are used to draw the path.
FUNCTION GdipGetPathPoints (BYVAL path AS GpPath PTR, BYVAL points AS GpPointF PTR, BYVAL count AS INT_) AS GpStatus
FUNCTION GdipGetPathPointsI (BYVAL path AS GpPath PTR, BYVAL points AS GpPoint PTR, BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| points | [out] Pointer to an array of GpPointF structures that receives the data points. You must allocate memory for this array. You can call the GdipGetPointCount function to determine the required size of the array. The size, in bytes, should be the return value of GdipGetPointCount multiplied by sizeof(GpPointF). |
| count | [in] Long integer value that specifies the number of elements in the points array. Set this parameter equal to the return value of the GdipGetPointCount function. |
' ========================================================================================
' This example extracts the points from a GraphicsPath using GdipGetPathPoints.
' ========================================================================================
SUB Example_GetPathPoints (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Get number of points
DIM count AS LONG
hStatus = GdipGetPointCount(path, @count)
' // Allocate array for points
DIM pts(ANY) AS GpPointF
REDIM pts(count - 1)
' // Retrieve points
hStatus = GdipGetPathPoints(path, @pts(0), count)
' // Display points
FOR i AS LONG = 0 TO count - 1
OutputDebugStringW("Point " & WSTR(i) & ": (" & WSTR(pts(i).x) & ", " & WSTR(pts(i).y) & ")")
NEXT
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets this path’s array of points. The array contains the endpoints and control points of the lines and Bézier splines that are used to draw the path.
FUNCTION GdipGetPathTypes (BYVAL path AS GpPath PTR, BYVAL types AS BYTE PTR, BYVAL count AS INT_) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| types | [out] Pointer to an array that receives the point types. You must allocate memory for this array. You can call the GdipGetPointCount method to determine the required size of the array. |
| count | [in] Long integer values that specifies the number of elements in the types array. Set this parameter equal to the return value of the GdipGetPointCount function. |
' ========================================================================================
' This example retrieves the types of each point in a GraphicsPath using GdipGetPathTypes.
' ========================================================================================
SUB Example_GetPathTypes (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Get number of points
DIM count AS LONG
hStatus = GdipGetPointCount(path, @count)
' // Allocate array for types
DIM types(ANY) AS BYTE
REDIM types(count - 1)
' // Retrieve types
hStatus = GdipGetPathTypes(path, @types(0), count)
' // Display points
FOR i AS LONG = 0 TO count - 1
OutputDebugStringW("Type " & WSTR(i) & ": (" & WSTR(types(i)) & ")")
NEXT
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets a bounding rectangle for this path.
FUNCTION GdipGetPathWorldBounds (BYVAL path AS GpPath PTR, BYVAL bounds AS GpRectF PTR, _
BYVAL matrix AS CONST GpMatrix PTR, BYVAL pen AS CONST GpPen PTR) AS GpStatus
FUNCTION GdipGetPathWorldBoundsI (BYVAL path AS GpPath PTR, BYVAL bounds AS GpRect PTR, _
BYVAL matrix AS CONST GpMatrix PTR, BYVAL pen AS CONST GpPen PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| bounds | [out] Pointer to a GpRectF structure that receives the bounding rectangle. |
| matrix | [in] Pointer to a Matrix object that specifies a transformation to be applied to this path before the bounding rectangle is calculated. This path is not permanently transformed; the transformation is used only during the process of calculating the bounding rectangle. The default value is NULL. |
| pen | [in] Pointer to a Pen object that influences the size of the bounding rectangle. The bounding rectangle received in bounds will be large enough to enclose this path when the path is drawn with the pen specified by this parameter. This ensures that the path is enclosed by the bounding rectangle even if the path is drawn with a wide pen. The default value is NULL. |
The rectangle returned by this method might be larger than necessary to enclose the path as drawn by the specified pen. The rectangle is calculated to allow for the pen’s miter limit at sharp corners and to allow for the pen’s end caps.
' ========================================================================================
' This example retrieves the bounding rectangle of a GraphicsPath using GdipGetPathWorldBounds.
' ========================================================================================
SUB Example_GetWorldBounds (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathEllipse(path, 100, 80, 150, 100)
' // Get world bounds
DIM bounds AS GpRectF
hStatus = GdipGetPathWorldBounds(path, @bounds, NULL, NULL)
' // Display bounds
OutputDebugStringW("Bounding box:")
OutputDebugStringW("X = " & WSTR(bounds.x))
OutputDebugStringW("Y = " & WSTR(bounds.y))
OutputDebugStringW("Width = " & WSTR(bounds.Width))
OutputDebugStringW("Height = " & WSTR(bounds.Height))
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Gets the number of points in this path’s array of data points. This is the same as the number of types in the path’s array of point types.
FUNCTION GdipGetPointCount (BYVAL path AS GpPath PTR, BYVAL count AS INT_ PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| count | [out] Pointer to a variable thagt receives the number of points in the path’s array of data points. |
' ========================================================================================
' This example uses GdipGetPointCount to determine how many points are in a GraphicsPath.
' ========================================================================================
SUB Example_GetPointCount (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Get number of points
DIM count AS LONG
hStatus = GdipGetPointCount(path, @count)
AfxMsg "Number of points in path: " & WSTR(count)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_ORANGE, 2, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Determines whether a specified point touches the outline of this path when the path is drawn by a specified Graphics object and a specified pen.
FUNCTION GdipIsOutlineVisiblePathPoint (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL pen AS GpPen PTR, BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
FUNCTION GdipIsOutlineVisiblePathPointI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL pen AS GpPen PTR, BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the point to be tested. |
| y | [in] The y-coordinate of the point to be tested. |
| pen | [in] Pointer to a Pen object. This method determines whether the test point touches the path outline that would be drawn by this pen. More points will touch an outline drawn by a wide pen than will touch an outline drawn by a narrow pen. |
| graphics | [in] Pointer to a Graphics object that specifies a world-to-device transformation. If the value of this parameter is NULL, the test is done in world coordinates; otherwise, the test is done in device coordinates. The default value is NULL. |
| result | [out] Pointer to a variable that receives a boolean value indicating whether test point touches the outline of this path (TRUE) or not (FALSE). |
' ========================================================================================
' The following example creates an elliptical path and draws that path with a wide yellow pen.
' Then the code tests each point in an array to see whether the point touches the outline
' (as it would be drawn by the wide yellow pen) of the path. Points that touch the outline
' are painted green, and points that don't touch the outline are painted red.
' ========================================================================================
SUB Example_IsOutlineVisible (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create the pen and brush
DIM yellowPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_YELLOW, 20, UnitWorld, @yellowPen)
DIM brush AS GpBrush PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @brush)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add an ellipse
hStatus = GdipAddPathEllipse(path, 50, 50, 200, 100)
' // Draw the path
hStatus = GdipDrawPath(graphics, yellowPen, path)
' // Create an array of three points, and determine whether each
' // point in the array touches the outline of the path.
' // If a point touches the outline, paint it in green.
' // If a point does not touch the outline, paint it red.
DIM pts(2) AS GpPointF
pts(0).x = 230 : pts(0).y = 138
pts(1).x = 100 : pts(1).y = 120
pts(2).x = 150 : pts(2).y = 170
FOR i AS LONG = 0 TO 2
DIM result AS BOOL
hStatus = GdipIsOutlineVisiblePathPoint(path, pts(i).x, pts(i).y, yellowPen, NULL, @result)
IF result THEN
hStatus = GdipSetSolidFillColor(brush, ARGB_LIGHTGREEN)
ELSE
hStatus = GdipSetSolidFillColor(brush, ARGB_RED)
END IF
hStatus = GdipFillEllipse(graphics, brush, pts(i).x - 3, pts(i).y - 3, 6, 6)
NEXT
' // Cleanup
IF yellowPen THEN GdipDeleteBrush(yellowPen)
IF brush THEN GdipDeleteBrush(brush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Determines whether a specified point lies in the area that is filled when this path is filled by a specified Graphics object.
FUNCTION GdipIsVisiblePathPoint (BYVAL path AS GpPath PTR, BYVAL x AS REAL, BYVAL y AS REAL, _
BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
FUNCTION GdipIsVisiblePathPointI (BYVAL path AS GpPath PTR, BYVAL x AS INT_, BYVAL y AS INT_, _
BYVAL graphics AS GpGraphics PTR, BYVAL result AS BOOL PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| x | [in] The x-coordinate of the point to be tested. |
| y | [in] The y-coordinate of the point to be tested. |
| graphics | [in] Pointer to a Graphics object that specifies a world-to-device transformation. If the value of this parameter is NULL, the test is done in world coordinates; otherwise, the test is done in device coordinates. The default value is NULL. |
| result | [out] Pointer to a variable that receives a boolean value indicating whether test point lies in the interior of this path (TRUE) or not (FALSE). |
' ========================================================================================
' This example checks if a point lies inside the filled area of a GraphicsPath.
' ========================================================================================
SUB Example_IsVisiblePathPoint (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
hStatus = GdipAddPathEllipse(path, 100, 80, 150, 100)
' // Check if point is on the path
' // Returns error 5 (StatusObjectBusy)
DIM isVisible AS BOOL
hStatus = GdipIsVisiblePathPoint(path, 150, 120, graphics, @isVisible)
IF isVisible THEN
AfxMsg "Point is visible"
ELSE
AfxMsg "Point is not visible"
END IF
' // Create a Pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLACK, 5, UnitWorld, @pen)
' // Draw the path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
' ========================================================================================
' The following example creates an elliptical path and draws that path with a wide yellow pen.
' Then the code tests each point in an array to see whether the point touches the outline
' (as it would be drawn by the wide yellow pen) of the path. Points that touch the outline
' are painted green, and points that don't touch the outline are painted red.
' ========================================================================================
SUB Example_IsVisiblePathPoint (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create the pen and brush
DIM yellowPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_YELLOW, 20, UnitWorld, @yellowPen)
DIM brush AS GpBrush PTR
hStatus = GdipCreateSolidFill(ARGB_RED, @brush)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add an ellipse
hStatus = GdipAddPathEllipse(path, 50, 50, 200, 100)
' // Draw the path
hStatus = GdipDrawPath(graphics, yellowPen, path)
' // Create an array of four points, and determine whether each
' // point in the array touches the outline of the path.
' // If a point touches the outline, paint it green.
' // If a point does not touch the outline, paint it red.
DIM pts(3) AS GpPointF
pts(0).x = 50 : pts(0).y = 100
pts(1).x = 270 : pts(1).y = 100
pts(2).x = 150 : pts(2).y = 170
pts(3).x = 180 : pts(3).y = 60
FOR i AS LONG = 0 TO 3
DIM result AS BOOL
hStatus = GdipIsVisiblePathPoint(path, pts(i).x, pts(i).y, graphics, @result)
IF result THEN
hStatus = GdipSetSolidFillColor(brush, ARGB_LIGHTGREEN)
ELSE
hStatus = GdipSetSolidFillColor(brush, ARGB_RED)
END IF
hStatus = GdipFillEllipse(graphics, brush, pts(i).x - 3, pts(i).y - 3, 6, 6)
NEXT
' // Cleanup
IF yellowPen THEN GdipDeleteBrush(yellowPen)
IF brush THEN GdipDeleteBrush(brush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Empties the path and sets the fill mode to FillModeAlternate.
FUNCTION FUNCTION GdipResetPath (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example adds shapes to a path, resets it, and adds a new shape.
' ========================================================================================
SUB Example_ResetPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add initial shape
hStatus = GdipAddPathRectangle(path, 100, 80, 150, 100)
' // Reset the path
hStatus = GdipResetPath(path)
' // Add new shape after reset
hStatus = GdipAddPathEllipse(path, 120, 100, 100, 60)
' // Create pen
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKSLATEBLUE, 2, UnitWorld, @pen)
' // Draw path
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Reverses the order of the points that define this path’s lines and curves.
FUNCTION GdipReversePath (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example draws a path before and after reversing it using GdipReversePath.
' ========================================================================================
SUB Example_ReversePath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add a triangle
hStatus = GdipAddPathLine(path, 100, 100, 200, 100)
hStatus = GdipAddPathLine(path, 200, 100, 150, 200)
hStatus = GdipClosePathFigure(path)
' // Draw original path in blue
DIM penBlue AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLUE, 2, UnitWorld, @penBlue)
hStatus = GdipDrawPath(graphics, penBlue, path)
' // Reverse the path
hStatus = GdipReversePath(path)
' // Offset the path for visibility
DIM matrix AS GpMatrix PTR
hStatus = GdipCreateMatrix(@matrix)
hStatus = GdipTranslateMatrix(matrix, 120, 0, MatrixOrderAppend)
hStatus = GdipTransformPath(path, matrix)
GdipDeleteMatrix(matrix)
' // Draw reversed path in red
DIM penRed AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 2, UnitWorld, @penRed)
hStatus = GdipDrawPath(graphics, penRed, path)
' // Cleanup
IF penBlue THEN GdipDeleteBrush(penBlue)
IF penRed THEN GdipDeleteBrush(penRed)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Sets the fill mode of this path.
FUNCTION GdipSetPathFillMode (BYVAL path AS GpPath PTR, BYVAL fillMode AS GpFillMode) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| fillMode | [in] Element of the FillMode enumeration that specifies how to fill areas when the path intersects itself. |
' ========================================================================================
' This example sets the fill mode of a GraphicsPath using GdipSetPathFillMode.
' ========================================================================================
SUB Example_SetPathFillMode (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add overlapping shapes
hStatus = GdipAddPathEllipse(path, 100, 80, 150, 100)
hStatus = GdipAddPathEllipse(path, 130, 110, 150, 100)
' // Change fill mode to Winding
hStatus = GdipSetPathFillMode(path, FillModeWinding)
' // Fill the path
DIM brush AS GpSolidFill PTR
hStatus = GdipCreateSolidFill(ARGB_LIGHTSKYBLUE, @brush)
hStatus = GdipFillPath(graphics, brush, path)
' // Cleanup
IF brush THEN GdipDeleteBrush(brush)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Designates the last point in this path as a marker point.
FUNCTION GdipSetPathMarker (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example sets a marker after adding a rectangle, then adds an ellipse.
' ========================================================================================
SUB Example_SetPathMarker (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add first shape
hStatus = GdipAddPathRectangle(path, 50, 50, 100, 60)
' // Set marker after rectangle
hStatus = GdipSetPathMarker(path)
' // Add second shape
hStatus = GdipAddPathEllipse(path, 200, 50, 100, 60)
' // Draw entire path
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKBLUE, 2, UnitWorld, @pen)
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Starts a new figure without closing the current figure. Subsequent points added to this path are added to the new figure.
FUNCTION GdipStartPathFigure (BYVAL path AS GpPath PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
' ========================================================================================
' This example creates two separate figures in a path using GdipStartPathFigure.
' ========================================================================================
SUB Example_StartPathFigure (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create GraphicsPath
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Add first figure (rectangle)
hStatus = GdipAddPathRectangle(path, 50, 50, 100, 60)
' // Start a new figure
hStatus = GdipStartPathFigure(path)
' // Add second figure (ellipse)
hStatus = GdipAddPathEllipse(path, 200, 50, 100, 60)
' // Draw path
DIM pen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_DARKMAGENTA, 2, UnitWorld, @pen)
hStatus = GdipDrawPath(graphics, pen, path)
' // Cleanup
IF pen THEN GdipDeleteBrush(pen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Multiplies each of this path’s data points by a specified matrix.
FUNCTION GdipTransformPath (BYVAL path AS GpPath PTR, BYVAL matrix AS GpMatrix PTR) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| matrix | [in] Pointer to a Matrix object that specifies the transformation. |
' ========================================================================================
' This example moves and rotates a GraphicsPath using GdipTransformPath.
' ========================================================================================
SUB Example_TransformPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
hStatus = GdipAddPathRectangle(path, 100, 10, 200, 50)
' // Draw the path in blue before applying a transformation.
DIM bluePen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLUE, 1, UnitWorld, bluePen)
hStatus = GdipDrawPath(graphics, bluePen, path)
' // Transform the path.
DIM matrix AS GpMatrix PTR
hStatus = GdipCreateMatrix(@matrix)
hStatus = GdipRotateMatrix(matrix, 30, MatrixOrderPrepend)
hStatus = GdipTransformPath(path, matrix)
DIM redPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 1, UnitWorld, @redPen)
hStatus = GdipDrawPath(graphics, redPen, path)
' // Cleanup
IF bluePen THEN GdipDeletePen(bluePen)
IF redPen THEN GdipDeletePen(redPen)
IF matrix THEN GdipDeleteMatrix(matrix)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Applies a warp transformation to this path. This functtion also flattens (converts to a sequence of straight lines) the path.
FUNCTION GdipWarpPath (BYVAL path AS GpPath PTR, BYVAL matrix AS GpMatrix PTR, _
BYVAL points AS CONST GpPointF PTR, BYVAL count AS INT_, BYVAL srcx AS REAL, BYVAL srcy AS REAL, _
BYVAL srcwidth AS REAL, BYVAL srcheight AS REAL, BYVAL warpMode AS WarpMode, _
BYVAL flatness AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| matrix | [in] Pointer to a Matrix object that represents a transformation to be applied along with the warp. If this parameter is NULL, no transformation is applied. The default value is NULL. |
| points | [in] Pointer to an array of points that, along with the srcRect parameter, defines the warp transformation. |
| count | [in] Long integer value that specifies the number of points in the destPoints array. The value of this parameter must be 3 or 4. |
| srcx | [in] Simple precision value that specifies the x-coordinate of the upper-left corner of the rectangle that, along with the destPoints parameter, defines the warp transformation. |
| srcy | [in] Simple precision value that specifies the y-coordinate of the upper-left corner of the rectangle that, along with the destPoints parameter, defines the warp transformation. |
| srcwidth | [in] Simple precision value that specifies the width of the rectangle that, along with the destPoints parameter, defines the warp transformation. |
| srcheight | [in] Real number that specifies the height of the rectangle that, along with the destPoints parameter, defines the warp transformation. |
| warpMode | [in] Element of the WarpMode enumeration that specifies the kind of warp to be applied. The default value is WarpModePerspective. |
| flatness | [in] Simple precision value that influences the number of line segments that are used to approximate the original path. Small values specify that many line segments are used, and large values specify that few line segments are used. The default value is FlatnessDefault. |
A GraphicsPath object stores a collection of data points that represent lines and curves. The GdipWarpPath function converts those data points so that they represent only lines. The flatness parameter influences the number of lines that are stored. The original data points that represented curves are lost.
If the count parameter has a value of 4, the warp transformation is defined as shown in the following table.
| Source point | Destination point |
|---|---|
| Upper-left corner of rcRect | destPoints[0] |
| Upper-right corner of rcRect | destPoints[1] |
| Lower-left corner of rcRect | destPoints[2] |
| Lower-right corner of rcRect | destPoints[3] |
A transformation specified by a source rectangle and four destination points is capable of mapping a rectangle to an arbitrary quadrilateral that is not necessarily a parallelogram.
If the count parameter has a value of 3, the warp transformation is defined as shown in the following table.
| Source point | Destination point |
|---|---|
| Upper-left corner of rcRect | destPoints[0] |
| Upper-right corner of rcRect | destPoints[1] |
| Lower-left corner of rcRect | destPoints[2] |
A transformation specified by a source rectangle and three destination points maps rectangles to parallelograms.
' ========================================================================================
' The following example creates a GraphicsPath object and adds a closed figure to the path.
' The code defines a warp transformation by specifying a source rectangle and an array of
' four destination points. The source rectangle and destination points are passed to the
' GdipWarpPath function. The code draws the path twice: once before it has been warped and
' once after it has been warped.
' ========================================================================================
SUB Example_WarpPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
DIM pts(7) AS GpPointF
pts(0).x = 20 : pts(0).y = 60
pts(1).x = 30 : pts(1).y = 90
pts(2).x = 15 : pts(2).y = 110
pts(3).x = 15 : pts(3).y = 145
pts(4).x = 55 : pts(4).y = 145
pts(5).x = 55 : pts(5).y = 110
pts(6).x = 40 : pts(6).y = 90
pts(7).x = 50 : pts(7).y = 60
hStatus = GdipAddPathLine2(path, @pts(0), 8)
hStatus = GdipClosePathFigure(path)
' // Draw the path before applying a warp transformation.
DIM bluePen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLUE, 1, UnitWorld, @bluePen)
hStatus = GdipDrawPath(graphics, bluePen, path)
' // Define a warp transformation, and warp the path.
DIM srcRect AS GpRectF = (10, 50, 50, 100)
' // Destinations points
DIM destPts(3) AS GpPointF
destPts(0).x = 220 : destPts(0).y = 10
destPts(1).x = 280 : destPts(1).y = 10
destPts(2).x = 100 : destPts(2).y = 150
destPts(3).x = 400 : destPts(3).y = 150
' // Warp the path
hStatus = GdipWarpPath(path, NULL, @destPts(0), 4, srcRect.x, srcRect.y, srcRect.Width, srcRect.Height, WarpModePerspective, FlatnessDefault)
' // Draw the warped path.
hStatus = GdipDrawPath(graphics, bluePen, path)
' // Draw the source rectangle and the destination polygon.
DIM blackPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_BLACK, 1, UnitWorld, @blackPen)
hStatus = GdipDrawRectangle(graphics, blackPen, srcRect.x, srcRect.y, srcRect.Width, srcRect.Height)
hStatus = GdipDrawLine(graphics, blackPen, destpts(0).x, destPts(0).y, destPts(1).x, destPts(1).y)
hStatus = GdipDrawLine(graphics, blackPen, destpts(0).x, destPts(0).y, destPts(2).x, destPts(2).y)
hStatus = GdipDrawLine(graphics, blackPen, destpts(1).x, destPts(1).y, destPts(3).x, destPts(3).y)
hStatus = GdipDrawLine(graphics, blackPen, destpts(2).x, destPts(2).y, destPts(3).x, destPts(3).y)
' // Cleanup
IF bluePen THEN GdipDeletePen(bluePen)
IF blackPen THEN GdipDeletePen(blackPen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Replaces this path with curves that enclose the area that is filled when this path is drawn by a specified pen. The Widen method also flattens the path.
FUNCTION GdipWidenPath (BYVAL path AS GpPath PTR, BYVAL pen AS GpPen PTR, _
BYVAL matrix AS GpMatrix PTR, BYVAL flatness AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| pen | [in] Pointer to a Pen object. The path is made as wide as it would be when drawn by this pen. |
| matrix | [in] Pointer to a Matrix object that specifies a transformation to be applied along with the widening. If this parameter is NULL, no transformation is applied. The default value is NULL. |
| flatness | [in] Simple precision value that specifies the maximum error between the path and its flattened approximation. Reducing the flatness increases the number of line segments in the approximation. The default value is FlatnessDefault. |
' ========================================================================================
' The following example creates a GraphicsPath object and adds a closed curve to the path.
' The code creates a green pen that has a width of 10, changes its style to DashStyleDash,
' and passes the address of that pen to the GdipWidenPath function. Then the code draws the
' path with a blue pen of width 1.
' ========================================================================================
SUB Example_WidenPath (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Create the pens.
DIM bluePen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 1, UnitWorld, @bluePen)
DIM greenPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_LIGHTGREEN, 10, UnitWorld, @greenPen)
' // Add a closed curve.
DIM pts(3) AS GpPointF
pts(0).x = 20 : pts(0).y = 20
pts(1).x = 160 : pts(1).y = 100
pts(2).x = 140 : pts(2).y = 60
pts(3).x = 60 : pts(3).y = 100
hStatus = GdipAddPathClosedCurve(path, @pts(0), 4)
' // The GdipWidenPath function respects the dash style of the specified pen
' // (the green pen in this case). The following instruction changes it.
hStatus = GdipSetPenDashStyle(greenPen, DashStyleDash)
' // Widen the path.
hStatus = GdipWidenPath(path, greenPen, NULL, FlatnessDefault)
' // Draw the path.
hStatus = GdipDrawPath(graphics, bluePen, path)
' // Cleanup
IF bluePen THEN GdipDeletePen(bluePen)
IF greenPen THEN GdipDeletePen(greenPen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================
Transforms and flattens this path, and then converts this path’s data points so that they represent only the outline of the path.
FUNCTION GdipWindingModeOutline (BYVAL path AS GpPath PTR, BYVAL matrix AS GpMatrix PTR, _
BYVAL flatness AS REAL) AS GpStatus
| Parameter | Description |
|---|---|
| path | [in] Pointer to the GraphicsPath object. |
| matrix | [in] Pointer to a Matrix object that specifies the transformation. If this parameter is NULL, no transformation is applied. The default value is NULL. |
| flatness | [in] Simple prevision value that specifies the maximum error between the path and its flattened approximation. Reducing the flatness increases the number of line segments in the approximation. The default value is FlatnessDefault. |
' ========================================================================================
' The following example creates a GraphicsPath object and calls the GdiAddPathClosedCurve
' method to add a closed cardinal spline to the path. The code calls the GdipWidenPath function
' to widen the path and then draws the path. Next, the code calls the GdipWindingModeOutline
' function The code calls the GdipTranslateWorldTransform function so that the outlined path
' drawn by the subsequent call to GdipDrawPath sits to the right of the first path.
' ========================================================================================
SUB Example_WindingModeOutline (BYVAL hdc AS HDC)
DIM hStatus AS LONG
' // Create a graphics object from the device context
DIM graphics AS GpGraphics PTR
hStatus = GdipCreateFromHDC(hdc, @graphics)
' // Get the DPI scaling ratios
DIM dpiX AS SINGLE
hStatus = GdipGetDpiX(graphics, @dpiX)
DIM rxRatio AS SINGLE = dpiX / 96
DIM dpiY AS SINGLE
hStatus = GdipGetDpiY(graphics, @dpiY)
Dim ryRatio AS SINGLE = dpiY / 96
' // Set the scale transform
hStatus = GdipScaleWorldTransform(graphics, rxRatio, ryRatio, MatrixOrderPrepend)
' // Create a path
DIM path AS GpPath PTR
hStatus = GdipCreatePath(FillModeAlternate, @path)
' // Create the pens.
DIM bluePen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_RED, 1, UnitWorld, @bluePen)
DIM greenPen AS GpPen PTR
hStatus = GdipCreatePen1(ARGB_LIGHTGREEN, 10, UnitWorld, @greenPen)
' // Add a closed curve
DIM pts(3) AS GpPointF
pts(0).x = 20 : pts(0).y = 20
pts(1).x = 160 : pts(1).y = 100
pts(2).x = 140 : pts(2).y = 60
pts(3).x = 60 : pts(3).y = 100
hStatus = GdipAddPathClosedCurve(path, @pts(0), 4)
hStatus = GdipWidenPath(path, greenPen, NULL, FlatnessDefault)
hStatus = GdipDrawPath(graphics, bluePen, path)
hStatus = GdipWindingModeOutline(path, NULL, FlatnessDefault)
hStatus = GdipTranslateWorldTransform(graphics, 180, 0, MatrixOrderPrepend)
hStatus = GdipDrawPath(graphics, bluePen, path)
' // Cleanup
IF bluePen THEN GdipDeletePen(bluePen)
IF greenPen THEN GdipDeletePen(greenPen)
IF path THEN GdipDeletePath(path)
IF graphics THEN GdipDeleteGraphics(graphics)
END SUB
' ========================================================================================